home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / net / sctp / checksum.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  2.6 KB  |  84 lines

  1. /* SCTP kernel reference Implementation
  2.  * Copyright (c) 1999-2001 Motorola, Inc.
  3.  * Copyright (c) 2001-2003 International Business Machines, Corp.
  4.  *
  5.  * This file is part of the SCTP kernel reference Implementation
  6.  *
  7.  * SCTP Checksum functions
  8.  *
  9.  * The SCTP reference implementation is free software;
  10.  * you can redistribute it and/or modify it under the terms of
  11.  * the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2, or (at your option)
  13.  * any later version.
  14.  *
  15.  * The SCTP reference implementation is distributed in the hope that it
  16.  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  17.  *                 ************************
  18.  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  19.  * See the GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with GNU CC; see the file COPYING.  If not, write to
  23.  * the Free Software Foundation, 59 Temple Place - Suite 330,
  24.  * Boston, MA 02111-1307, USA.
  25.  *
  26.  * Please send any bug reports or fixes you make to the
  27.  * email address(es):
  28.  *    lksctp developers <lksctp-developers@lists.sourceforge.net>
  29.  *
  30.  * Or submit a bug report through the following website:
  31.  *    http://www.sf.net/projects/lksctp
  32.  *
  33.  * Written or modified by:
  34.  *    Dinakaran Joseph
  35.  *    Jon Grimm <jgrimm@us.ibm.com>
  36.  *    Sridhar Samudrala <sri@us.ibm.com>
  37.  *
  38.  * Rewritten to use libcrc32c by:
  39.  *    Vlad Yasevich <vladislav.yasevich@hp.com>
  40.  *
  41.  * Any bugs reported given to us we will try to fix... any fixes shared will
  42.  * be incorporated into the next SCTP release.
  43.  */
  44.  
  45. #include <linux/types.h>
  46. #include <net/sctp/sctp.h>
  47. #include <linux/crc32c.h>
  48.  
  49. static inline __be32 sctp_crc32c(__be32 crc, u8 *buffer, u16 length)
  50. {
  51.     return (__force __be32)crc32c((__force u32)crc, buffer, length);
  52. }
  53.  
  54. static inline __be32 sctp_start_cksum(__u8 *buffer, __u16 length)
  55. {
  56.     __be32 crc = ~cpu_to_be32(0);
  57.     __u8  zero[sizeof(__u32)] = {0};
  58.  
  59.     /* Optimize this routine to be SCTP specific, knowing how
  60.      * to skip the checksum field of the SCTP header.
  61.      */
  62.  
  63.     /* Calculate CRC up to the checksum. */
  64.     crc = sctp_crc32c(crc, buffer, sizeof(struct sctphdr) - sizeof(__u32));
  65.  
  66.     /* Skip checksum field of the header. */
  67.     crc = sctp_crc32c(crc, zero, sizeof(__u32));
  68.  
  69.     /* Calculate the rest of the CRC. */
  70.     crc = sctp_crc32c(crc, &buffer[sizeof(struct sctphdr)],
  71.                 length - sizeof(struct sctphdr));
  72.     return crc;
  73. }
  74.  
  75. static inline __be32 sctp_update_cksum(__u8 *buffer, __u16 length, __be32 crc32)
  76. {
  77.     return sctp_crc32c(crc32, buffer, length);
  78. }
  79.  
  80. static inline __be32 sctp_end_cksum(__be32 crc32)
  81. {
  82.     return (__force __be32)~cpu_to_le32((__force u32)crc32);
  83. }
  84.